home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / u_man / cat3 / Tk / parseargv.z / parseargv
Text File  |  1998-10-30  |  25KB  |  463 lines

  1.  
  2.  
  3.  
  4. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      Tk_ParseArgv - process command-line options
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ####iiiinnnncccclllluuuuddddeeee <<<<ttttkkkk....hhhh>>>>
  13.  
  14.      int
  15.      TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv(_i_n_t_e_r_p, _t_k_w_i_n, _a_r_g_c_P_t_r, _a_r_g_v, _a_r_g_T_a_b_l_e, _f_l_a_g_s)
  16.  
  17. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  18.      Tcl_Interp    *_i_n_t_e_r_p     (in)      Interpreter to use for returning
  19.                                          error messages.
  20.  
  21.      Tk_Window     _t_k_w_i_n       (in)      Window to use when arguments specify
  22.                                          Tk options.  If NULL, then no Tk
  23.                                          options will be processed.
  24.  
  25.      int           _a_r_g_c_P_t_r     (in/out)  Pointer to number of arguments in
  26.                                          argv;  gets modified to hold number
  27.                                          of unprocessed arguments that remain
  28.                                          after the call.
  29.  
  30.      char          **_a_r_g_v      (in/out)  Command line arguments passed to main
  31.                                          program.  Modified to hold
  32.                                          unprocessed arguments that remain
  33.                                          after the call.
  34.  
  35.      Tk_ArgvInfo   *_a_r_g_T_a_b_l_e   (in)      Array of argument descriptors,
  36.                                          terminated by element with type
  37.                                          TK_ARGV_END.
  38.  
  39.      int           _f_l_a_g_s       (in)      If non-zero, then it specifies one or
  40.                                          more flags that control the parsing
  41.                                          of arguments.  Different flags may be
  42.                                          OR'ed together.  The flags currently
  43.                                          defined are
  44.                                          TK_ARGV_DONT_SKIP_FIRST_ARG,
  45.                                          TK_ARGV_NO_ABBREV,
  46.                                          TK_ARGV_NO_LEFTOVERS, and
  47.                                          TK_ARGV_NO_DEFAULTS.
  48.  
  49. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  50.      TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv processes an array of command-line arguments according to a
  51.      table describing the kinds of arguments that are expected.  Each of the
  52.      arguments in _a_r_g_v is processed in turn:  if it matches one of the entries
  53.      in _a_r_g_T_a_b_l_e, the argument is processed according to that entry and
  54.      discarded.  The arguments that do not match anything in _a_r_g_T_a_b_l_e are
  55.      copied down to the beginning of _a_r_g_v (retaining their original order) and
  56.      returned to the caller.  At the end of the call TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv sets
  57.      *_a_r_g_c_P_t_r to hold the number of arguments that are left in _a_r_g_v, and
  58.      _a_r_g_v[*_a_r_g_c_P_t_r] will hold the value NULL.  Normally, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv assumes
  59.      that _a_r_g_v[_0] is a command name, so it is treated like an argument that
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  71.  
  72.  
  73.  
  74.      doesn't match _a_r_g_T_a_b_l_e and returned to the caller;  however, if the
  75.      TK_ARGV_DONT_SKIP_FIRST_ARG bit is set in _f_l_a_g_s then _a_r_g_v[_0] will be
  76.      processed just like the other elements of _a_r_g_v.
  77.  
  78.      TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv normally returns the value TCL_OK.  If an error occurs while
  79.      parsing the arguments, then TCL_ERROR is returned and TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv will
  80.      leave an error message in _i_n_t_e_r_p->_r_e_s_u_l_t in the standard Tcl fashion.  In
  81.      the event of an error return, *_a_r_g_v_P_t_r will not have been modified, but
  82.      _a_r_g_v could have been partially modified.  The possible causes of errors
  83.      are explained below.
  84.  
  85.      The _a_r_g_T_a_b_l_e array specifies the kinds of arguments that are expected;
  86.      each of its entries has the following structure:
  87.  
  88.           ttttyyyyppppeeeeddddeeeeffff ssssttttrrrruuuucccctttt {
  89.               cccchhhhaaaarrrr*_k_e_y;
  90.               iiiinnnntttt _t_y_p_e;
  91.               cccchhhhaaaarrrr*_s_r_c;
  92.               cccchhhhaaaarrrr*_d_s_t;
  93.               cccchhhhaaaarrrr*_h_e_l_p;
  94.           }}}} TTTTkkkk____AAAArrrrggggvvvvIIIInnnnffffoooo;;;;
  95.  
  96.  
  97.      The _k_e_y field is a string such as ``-display'' or ``-bg'' that is
  98.      compared with the values in _a_r_g_v.  _T_y_p_e indicates how to process an
  99.      argument that matches _k_e_y (more on this below).  _S_r_c and _d_s_t are
  100.      additional values used in processing the argument.  Their exact usage
  101.      depends on _t_y_p_e, but typically _s_r_c indicates a value and _d_s_t indicates
  102.      where to store the value.  The cccchhhhaaaarrrr **** declarations for _s_r_c and _d_s_t are
  103.      placeholders:  the actual types may be different.  Lastly, _h_e_l_p is a
  104.      string giving a brief description of this option;  this string is printed
  105.      when users ask for help about command-line options.
  106.  
  107.      When processing an argument in _a_r_g_v, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv compares the argument
  108.      to each of the _k_e_y's in _a_r_g_T_a_b_l_e.  TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv selects the first
  109.      specifier whose _k_e_y matches the argument exactly, if such a specifier
  110.      exists.  Otherwise TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv selects a specifier for which the
  111.      argument is a unique abbreviation.  If the argument is a unique
  112.      abbreviation for more than one specifier, then an error is returned.  If
  113.      there is no matching entry in _a_r_g_T_a_b_l_e, then the argument is skipped and
  114.      returned to the caller.
  115.  
  116.      Once a matching argument specifier is found, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv processes the
  117.      argument according to the _t_y_p_e field of the specifier.  The argument that
  118.      matched _k_e_y is called ``the matching argument'' in the descriptions
  119.      below.  As part of the processing, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv may also use the next
  120.      argument in _a_r_g_v after the matching argument, which is called ``the
  121.      following argument''.  The legal values for _t_y_p_e, and the processing that
  122.      they cause, are as follows:
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  137.  
  138.  
  139.  
  140.      TTTTKKKK____AAAARRRRGGGGVVVV____EEEENNNNDDDD
  141.           Marks the end of the table.  The last entry in _a_r_g_T_a_b_l_e must have
  142.           this type;  all of its other fields are ignored and it will never
  143.           match any arguments.
  144.  
  145.      TTTTKKKK____AAAARRRRGGGGVVVV____CCCCOOOONNNNSSSSTTTTAAAANNNNTTTT
  146.           _S_r_c is treated as an integer and _d_s_t is treated as a pointer to an
  147.           integer.  _S_r_c is stored at *_d_s_t.  The matching argument is
  148.           discarded.
  149.  
  150.      TTTTKKKK____AAAARRRRGGGGVVVV____IIIINNNNTTTT
  151.           The following argument must contain an integer string in the format
  152.           accepted by ssssttttrrrrttttoooollll (e.g. ``0'' and ``0x'' prefixes may be used to
  153.           specify octal or hexadecimal numbers, respectively).  _D_s_t is treated
  154.           as a pointer to an integer;  the following argument is converted to
  155.           an integer value and stored at *_d_s_t.  _S_r_c is ignored.  The matching
  156.           and following arguments are discarded from _a_r_g_v.
  157.  
  158.      TTTTKKKK____AAAARRRRGGGGVVVV____FFFFLLLLOOOOAAAATTTT
  159.           The following argument must contain a floating-point number in the
  160.           format accepted by ssssttttrrrrttttoooollll.  _D_s_t is treated as the address of an
  161.           double-precision floating point value;  the following argument is
  162.           converted to a double-precision value and stored at *_d_s_t.  The
  163.           matching and following arguments are discarded from _a_r_g_v.
  164.  
  165.      TTTTKKKK____AAAARRRRGGGGVVVV____SSSSTTTTRRRRIIIINNNNGGGG
  166.           In this form, _d_s_t is treated as a pointer to a (char *);
  167.           TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv stores at *_d_s_t a pointer to the following argument, and
  168.           discards the matching and following arguments from _a_r_g_v.  _S_r_c is
  169.           ignored.
  170.  
  171.      TTTTKKKK____AAAARRRRGGGGVVVV____UUUUIIIIDDDD
  172.           This form is similar to TK_ARGV_STRING, except that the argument is
  173.           turned into a Tk_Uid by calling TTTTkkkk____GGGGeeeettttUUUUiiiidddd.  _D_s_t is treated as a
  174.           pointer to a Tk_Uid; TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv stores at *_d_s_t the Tk_Uid
  175.           corresponding to the following argument, and discards the matching
  176.           and following arguments from _a_r_g_v.  _S_r_c is ignored.
  177.  
  178.      TTTTKKKK____AAAARRRRGGGGVVVV____CCCCOOOONNNNSSSSTTTT____OOOOPPPPTTTTIIIIOOOONNNN
  179.           This form causes a Tk option to be set (as if the ooooppppttttiiiioooonnnn command had
  180.           been invoked).  The _s_r_c field is treated as a pointer to a string
  181.           giving the value of an option, and _d_s_t is treated as a pointer to
  182.           the name of the option.  The matching argument is discarded.  If
  183.           _t_k_w_i_n is NULL, then argument specifiers of this type are ignored (as
  184.           if they did not exist).
  185.  
  186.      TTTTKKKK____AAAARRRRGGGGVVVV____OOOOPPPPTTTTIIIIOOOONNNN____VVVVAAAALLLLUUUUEEEE
  187.           This form is similar to TK_ARGV_CONST_OPTION, except that the value
  188.           of the option is taken from the following argument instead of from
  189.           _s_r_c.  _D_s_t is used as the name of the option.  _S_r_c is ignored.  The
  190.           matching and following arguments are discarded.  If _t_k_w_i_n is NULL,
  191.           then argument specifiers of this type are ignored (as if they did
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  203.  
  204.  
  205.  
  206.           not exist).
  207.  
  208.      TTTTKKKK____AAAARRRRGGGGVVVV____OOOOPPPPTTTTIIIIOOOONNNN____NNNNAAAAMMMMEEEE____VVVVAAAALLLLUUUUEEEE
  209.           In this case the following argument is taken as the name of a Tk
  210.           option and the argument after that is taken as the value for that
  211.           option.  Both _s_r_c and _d_s_t are ignored.  All three arguments are
  212.           discarded from _a_r_g_v.  If _t_k_w_i_n is NULL, then argument specifiers of
  213.           this type are ignored (as if they did not exist).
  214.  
  215.      TTTTKKKK____AAAARRRRGGGGVVVV____HHHHEEEELLLLPPPP
  216.           When this kind of option is encountered, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv uses the _h_e_l_p
  217.           fields of _a_r_g_T_a_b_l_e to format a message describing all the valid
  218.           arguments.  The message is placed in _i_n_t_e_r_p->_r_e_s_u_l_t and TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv
  219.           returns TCL_ERROR.  When this happens, the caller normally prints
  220.           the help message and aborts.  If the _k_e_y field of a TK_ARGV_HELP
  221.           specifier is NULL, then the specifier will never match any
  222.           arguments;  in this case the specifier simply provides extra
  223.           documentation, which will be included when some other TK_ARGV_HELP
  224.           entry causes help information to be returned.
  225.  
  226.      TTTTKKKK____AAAARRRRGGGGVVVV____RRRREEEESSSSTTTT
  227.           This option is used by programs or commands that allow the last
  228.           several of their options to be the name and/or options for some
  229.           other program.  If a TTTTKKKK____AAAARRRRGGGGVVVV____RRRREEEESSSSTTTT argument is found, then
  230.           TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv doesn't process any of the remaining arguments;  it
  231.           returns them all at the beginning of _a_r_g_v (along with any other
  232.           unprocessed arguments).  In addition, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv treats _d_s_t as the
  233.           address of an integer value, and stores at *_d_s_t the index of the
  234.           first of the TTTTKKKK____AAAARRRRGGGGVVVV____RRRREEEESSSSTTTT options in the returned _a_r_g_v.  This allows
  235.           the program to distinguish the TTTTKKKK____AAAARRRRGGGGVVVV____RRRREEEESSSSTTTT options from other
  236.           unprocessed options that preceded the TTTTKKKK____AAAARRRRGGGGVVVV____RRRREEEESSSSTTTT.
  237.  
  238.      TTTTKKKK____AAAARRRRGGGGVVVV____FFFFUUUUNNNNCCCC
  239.           For this kind of argument, _s_r_c is treated as the address of a
  240.           procedure, which is invoked to process the following argument.  The
  241.           procedure should have the following structure:
  242.  
  243.           iiiinnnntttt
  244.           _f_u_n_c(_d_s_t, _k_e_y, _n_e_x_t_A_r_g)
  245.               cccchhhhaaaarrrr    *_d_s_t;
  246.               cccchhhhaaaarrrr    *_k_e_y;
  247.               cccchhhhaaaarrrr    *_n_e_x_t_A_r_g;
  248.           {
  249.           }
  250.  
  251.  
  252.           The _d_s_t and _k_e_y parameters will contain the corresponding fields
  253.           from the _a_r_g_T_a_b_l_e entry, and _n_e_x_t_A_r_g will point to the following
  254.           argument from _a_r_g_v (or NULL if there aren't any more arguments left
  255.           in _a_r_g_v).  If _f_u_n_c uses _n_e_x_t_A_r_g (so that TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv should discard
  256.           it), then it should return 1.  Otherwise it should return 0 and
  257.           TTTTkkkkPPPPaaaarrrrsssseeeeAAAArrrrggggvvvv will process the following argument in the normal
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  269.  
  270.  
  271.  
  272.           fashion.  In either event the matching argument is discarded.
  273.  
  274.      TTTTKKKK____AAAARRRRGGGGVVVV____GGGGEEEENNNNFFFFUUUUNNNNCCCC
  275.           This form provides a more general procedural escape.  It treats _s_r_c
  276.           as the address of a procedure, and passes that procedure all of the
  277.           remaining arguments.  The procedure should have the following form:
  278.  
  279.           iiiinnnntttt
  280.           _g_e_n_f_u_n_c(_d_s_t, _i_n_t_e_r_p, _k_e_y, _a_r_g_c, _a_r_g_v)
  281.               cccchhhhaaaarrrr    *_d_s_t;
  282.               TTTTccccllll____IIIInnnntttteeeerrrrpppp  *_i_n_t_e_r_p;
  283.               cccchhhhaaaarrrr    *_k_e_y;
  284.               iiiinnnntttt _a_r_g_c;
  285.               cccchhhhaaaarrrr    **_a_r_g_v;
  286.           {
  287.           }
  288.  
  289.  
  290.           The _d_s_t and _k_e_y parameters will contain the corresponding fields
  291.           from the _a_r_g_T_a_b_l_e entry.  _I_n_t_e_r_p will be the same as the _i_n_t_e_r_p
  292.           argument to TTTTccccllll____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv.  _A_r_g_c and _a_r_g_v refer to all of the
  293.           options after the matching one.  _G_e_n_f_u_n_c should behave in a fashion
  294.           similar to TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv:  parse as many of the remaining arguments
  295.           as it can, then return any that are left by compacting them to the
  296.           beginning of _a_r_g_v (starting at _a_r_g_v[0]).  _G_e_n_f_u_n_c should return a
  297.           count of how many arguments are left in _a_r_g_v; TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv will
  298.           process them.  If _g_e_n_f_u_n_c encounters an error then it should leave
  299.           an error message in _i_n_t_e_r_p->_r_e_s_u_l_t, in the usual Tcl fashion, and
  300.           return -1;  when this happens TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv will abort its processing
  301.           and return TCL_ERROR.
  302.  
  303.  
  304. FFFFLLLLAAAAGGGGSSSS
  305.      TTTTKKKK____AAAARRRRGGGGVVVV____DDDDOOOONNNNTTTT____SSSSKKKKIIIIPPPP____FFFFIIIIRRRRSSSSTTTT____AAAARRRRGGGG
  306.           TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv normally treats _a_r_g_v[_0] as a program or command name,
  307.           and returns it to the caller just as if it hadn't matched _a_r_g_T_a_b_l_e.
  308.           If this flag is given, then _a_r_g_v[_0] is not given special treatment.
  309.  
  310.      TTTTKKKK____AAAARRRRGGGGVVVV____NNNNOOOO____AAAABBBBBBBBRRRREEEEVVVV
  311.           Normally, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv accepts unique abbreviations for _k_e_y values
  312.           in _a_r_g_T_a_b_l_e.  If this flag is given then only exact matches will be
  313.           acceptable.
  314.  
  315.      TTTTKKKK____AAAARRRRGGGGVVVV____NNNNOOOO____LLLLEEEEFFFFTTTTOOOOVVVVEEEERRRRSSSS
  316.           Normally, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv returns unrecognized arguments to the caller.
  317.           If this bit is set in _f_l_a_g_s then TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv will return an error
  318.           if it encounters any argument that doesn't match _a_r_g_T_a_b_l_e.  The only
  319.           exception to this rule is _a_r_g_v[_0], which will be returned to the
  320.           caller with no errors as long as TK_ARGV_DONT_SKIP_FIRST_ARG isn't
  321.           specified.
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  335.  
  336.  
  337.  
  338.      TTTTKKKK____AAAARRRRGGGGVVVV____NNNNOOOO____DDDDEEEEFFFFAAAAUUUULLLLTTTTSSSS
  339.           Normally, TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv searches an internal table of standard
  340.           argument specifiers in addition to _a_r_g_T_a_b_l_e.  If this bit is set in
  341.           _f_l_a_g_s, then TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv will use only _a_r_g_T_a_b_l_e and not its default
  342.           table.
  343.  
  344.  
  345. EEEEXXXXAAAAMMMMPPPPLLLLEEEE
  346.      Here is an example definition of an _a_r_g_T_a_b_l_e and some sample command
  347.      lines that use the options.  Note the effect on _a_r_g_c and _a_r_g_v;  arguments
  348.      processed by TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv are eliminated from _a_r_g_v, and _a_r_g_c is updated
  349.      to reflect reduced number of arguments.
  350.  
  351.           /*
  352.            * Define and set default values for globals.
  353.            */
  354.           int debugFlag = 0;
  355.           int numReps = 100;
  356.           char defaultFileName[] = "out";
  357.           char *fileName = defaultFileName;
  358.           Boolean exec = FALSE;
  359.  
  360.           /*
  361.            * Define option descriptions.
  362.            */
  363.           Tk_ArgvInfo argTable[] = {
  364.               {"-X", TK_ARGV_CONSTANT, (char *) 1, (char *) &debugFlag,
  365.                   "Turn on debugging printfs"},
  366.               {"-N", TK_ARGV_INT, (char *) NULL, (char *) &numReps,
  367.                   "Number of repetitions"},
  368.               {"-of", TK_ARGV_STRING, (char *) NULL, (char *) &fileName,
  369.                   "Name of file for output"},
  370.               {"x", TK_ARGV_REST, (char *) NULL, (char *) &exec,
  371.                   "File to exec, followed by any arguments (must be last argument)."},
  372.               {(char *) NULL, TK_ARGV_END, (char *) NULL, (char *) NULL,
  373.                   (char *) NULL}
  374.           };
  375.  
  376.           main(argc, argv)
  377.               int argc;
  378.               char *argv[];
  379.           {
  380.               ...
  381.  
  382.               if (Tk_ParseArgv(interp, tkwin, &argc, argv, argTable, 0) != TCL_OK) {
  383.                   fprintf(stderr, "%s\n", interp->result);
  384.                   exit(1);
  385.               }
  386.  
  387.               /*
  388.                * Remainder of the program.
  389.                */
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))                                            TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv((((3333TTTTkkkk))))
  401.  
  402.  
  403.  
  404.           }
  405.  
  406.  
  407.      Note that default values can be assigned to variables named in _a_r_g_T_a_b_l_e:
  408.      the variables will only be overwritten if the particular arguments are
  409.      present in _a_r_g_v.  Here are some example command lines and their effects.
  410.  
  411.           prog -N 200 infile      # just sets the numReps variable to 200
  412.           prog -of out200 infile  # sets fileName to reference "out200"
  413.           prog -XN 10 infile      # sets the debug flag, also sets numReps
  414.  
  415.      In all of the above examples, _a_r_g_c will be set by TTTTkkkk____PPPPaaaarrrrsssseeeeAAAArrrrggggvvvv to 2,
  416.      _a_r_g_v[0] will be ``prog'', _a_r_g_v[1] will be ``infile'', and _a_r_g_v[2] will be
  417.      NULL.
  418.  
  419.  
  420. KKKKEEEEYYYYWWWWOOOORRRRDDDDSSSS
  421.      arguments, command line, options
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.